package org.xx.armory.service;

import static org.xx.armory.commons.SysUtils.format;

/**
 * 服务运行时产生的异常。
 *
 * @author Haart
 */
public class ServiceException
        extends RuntimeException {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    /**
     * 构造{@link ServiceException}类型的实例。
     *
     * @param message
     *         异常消息。
     */
    public ServiceException(
            String message
    ) {
        super(message);
    }

    /**
     * 构造{@link ServiceException}类型的实例。
     *
     * @param cause
     *         引发异常的原因。
     */
    public ServiceException(
            Throwable cause
    ) {
        super(cause != null ? cause.getMessage() : "", cause);
    }

    /**
     * 构造{@link ServiceException}类型的实例。
     *
     * @param message
     *         异常消息。
     * @param cause
     *         引发异常的原因。
     * @param values
     *         异常消息的参数。
     */
    public ServiceException(
            String message,
            Throwable cause,
            Object... values
    ) {
        super(format(message, values), cause);
    }

    /**
     * 构造{@link ServiceException}类型的实例。
     *
     * @param message
     *         异常消息。
     * @param cause
     *         引发异常的原因。
     * @param enableSuppression
     *         是否压制此异常。
     * @param writableStackTrace
     *         是否在调用栈中写入此异常的信息。
     */
    protected ServiceException(
            String message,
            Throwable cause,
            boolean enableSuppression,
            boolean writableStackTrace
    ) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
